﻿namespace Signit.Sdk.Entity
{
    public class SignerPosition
    {
        public static Builder CreateBuilder() => new Builder();

        public KeywordPosition KeywordPosition { get; set; }
        public RectanglePosition RectanglePosition { get; set; }
        public string FieldName { get; set; }

        /**
        * 表单坐标位置对象建造器
        * 
        * @since 1.0.0
        */
        public class Builder
        {
            private KeywordPosition keywordPosition;
            private RectanglePosition rectanglePosition;
            private string fieldName;

            /**
             * 
             * @param keywordPosition
             *            利用关键字定位签名矩形框所在位置的数据对象；利用关键字进行定位
             *            {@link KeywordPosition}
             * @return 利用关键字定位签名矩形框所在位置的数据对象建造器{@link PositionBuilder}
             * @since 1.0.0
             */
            public Builder WithKeywordPosition(KeywordPosition keywordPosition)
            {
                this.keywordPosition = keywordPosition;
                return this;
            }

            /**
             * 
             * @param rectanglePosition
             *            直接设定好的签名矩形框坐标 {@link RectanglePosition}
             * @return 利用关键字定位签名矩形框所在位置的数据对象建造器{@link PositionBuilder}
             * @since 1.0.0
             */
            public Builder WithRectanglePosition(RectanglePosition rectanglePosition)
            {
                this.rectanglePosition = rectanglePosition;
                return this;
            }

            /**
             * 
             * @param fieldsName
             *            签名域名称；签名文件格式需要是pdf，且签名文件中已经设置好签名域名称对应的签名域
             * @return 利用关键字定位签名矩形框所在位置的数据对象建造器{@link PositionBuilder}
             * @since 1.0.0
             */
            public Builder WithFieldName(string fieldName)
            {
                this.fieldName = fieldName;
                return this;
            }

            /**
             * 
             * @return 表单坐标位置对象 {@link Position}
             * @since 1.0.0
             */
            public SignerPosition Build()
            {
                return new SignerPosition
                {
                    KeywordPosition = keywordPosition,
                    RectanglePosition = rectanglePosition,
                    FieldName = fieldName,
                };
            }
        }

    }
}
